#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020-10-25 08:18
# @Author : youngchaolin

''''''

'''
1 自定义模块
2 模块是什么？
1）把相似的功能提取出来，如input功能，print功能，time.time()，os.path等放到一个文件，
2）当你想用这个功能时，拿来即用就行
一个模块就是一个.py文件，常用的相似功能的集合
3 为什么要有模块
1）拿来主义，提高开发效率
2）便于维护管理
3）什么是脚本？
脚本就是py文件，长期保存代码的文件
4 模块的分类
1）内置模块200种左右，python解释器自带的模块，time os sys hashlib等
2）第三方模块6000多种，一些大牛写的，非常的好用，需要pip install安装，如Beautiful_soup，request，Django,flask等
3）自定义模块，自己写的py文件
5 import的使用
1)import导入clyang后，会执行被导入模块里的所有代码
2)第一次导入clyang模块后，会将这个模块里的所有代码加载到内存，只要你的程序没有结束，接下来引用会
先从内存中查找有没有clyang这个模块的内容，有就不会再执行一遍里面的内容
3)第一次导入模块执行三次事情
# 1 在内存中创建一个以clyang命名的名称空间
# 2 执行此名称空间clyang的所有可执行代码,将所有变量与值的对应关系加载到这个名称空间
# 3 通过clyang. 的方式可以引用模块里面的代码

被导入模块有独立的名称空间

为模块起别名
1） 简单，便捷
2） 有利于代码的优化

导入多个模块
import a,b,c这样写不建议，下面的写法是建议的
import a
import b
import c

from clyang import name,read1,read2这样写，也是不建议的，下面的写法是建议的
from clyang import name
from clyang import read1
from clyang import read2


from...import...
1) 使用起来更方便，可以直接使用
2）但是容易与文本名字产生冲突

from...import *
__all__指定可以被访问的模块内容


py文件的两种功能
1.自己当做脚本使用
2.被别人使用，模块使用

系统导入模块的路径
1 内存中：如果之前已经导入过clyang模块，就直接使用内存中的模块
2 内置路径：如果内存中没有，默认会从python解释器的安装路径下找，会找Lib目录下的模块
import sys
print(sys.modules)
如果内存中没有，就从内置中找
3 sys.path：如果内置路径下没有，会从sys.path下找
4 网上下载的模块，会存放到site-packages模块下

json pickle模块
序列化模块：将一种数据结构（list、tuple、dict...）转化为特殊的序列
为什么要有序列化模块？
数据最终转变为bytes类型，只有字符串str可以和bytes互换
list tuple ... <-----> str <-----> bytes
数据存储在文件中，str形式存储，比如字典

数据通过网络传输，str不能还原为原来的数据类型
特殊字符串：序列化

json：可以将数据转化为特殊的字符串，并且可以反转回去

json序列化模块：
1 不同的语言都遵循的一种数据转化格式，不同的语言都可以使用的特殊字符串。
2 json序列化只支持部分python数据结构：dict list tuple str int float True False None

两对四种方法：
网络传输：dumps loads
文件存储：dump load

序列化模块的分类
json

pickle
1 只支持python语言，是python语言遵循的一种数据转化格式
2 支持python所有的数据类型、包括实例化对象

'''

